<?php
/** ================================
 *  Intellect Board 3
 *  http://intblite.ru
 *  Модуль вывода меню
 *  TODO: проверка прав доступа в show_structure
 *  TODO: обработка URL с помощью функции hurl там, где это необходимо
 *  ================================ */

class menu extends Module {

  /** Показывает меню с задаваемыми пунктами (описанными в таблице menu_item) **/
  function show($id) {
    global $app;
    $sql = 'SELECT title,url FROM '.DB_prefix.'menu_item WHERE mid='.intval($id);
    if ($app->user->is_admin()) {
      $sql.=' AND show_admins="1"';
    }
    elseif ($app->user->is_guest()) {
      $sql.=' AND show_guests="1"';
    }
    else {
      $sql.=' AND show_users="1"';
    }
    $sql.=' ORDER BY sortfield';
    $menuitems=$app->db->select_all($sql);
    $result = new Html('menu','menu');
    $result->set('items',$menuitems);
    return $result;
  }

  /** Показывает меню, пункты которого являются дочерними разделами указанного объекта **/
  function show_structure($oid,$self=false) {
    global $app;
    // TODO: добавить проверку, нет ли объекта
    $sql = 'SELECT title,url FROM '.DB_prefix.' object WHERE oid='.intval($oid);
    $root=$app->db->select_row($sql);

    $sql = 'SELECT title,url FROM '.DB_prefix.' object WHERE url LIKE '.$app->slashes($root['url']).'/% ORDER BY floatsort';
    // TODO: добавить проверку на исключение запрещенных для просмотра разделов
    $menuitems=$app->db->select_all($sql);

    if ($self) array_unshift($menuitems,$root); // если включен вывод корневого объекта, добавляем его в качестве первого элемента в меню
    $result = new Html('menu.htm','menu');
    $result->set('items',$menuitems);
    return $result;
  }

  /** Показывает поля для входа для гостя или приветствие для пользователя **/
  function welcome() {
    global $app;

    if ($app->user->is_guest()) $result = new Html('guest','menu');
    else {
      $result = new Html('user','menu');
      $result->set('username',$_SESSION['user']['login']);
    }
    return $result;
  }

  /** Создает указатель на текущее местоположение на сайте/форуме, составляя его из родительских объектов и описания текущего действия
   * Также добавляет ссылку на RSS **/
  function location() {
    global $app;

    $result = new Html('location','menu');
    $count=count($app->objparents);
    if ($count==1) return $result; // если в массиве всего один объект, мы находимся в корне сайта, поэтому ничего не выводим
    $menuitems=array(array('title'=>$app->objparents[0]['title'],'url'=>'/'));
    for ($i=1; $i<$count-1; $i++) {
      $menuitems[] = $app->objparents[$i];
    }

    if (is_object($app->main_object)) {
      $descr=$app->main_object->get_location($app->action);
      if ($descr) {
        $menuitems[]=$app->objdata;
        $menuitems[]=array('title'=>$descr,'url'=>false);
      }
      else $menuitems[]=array('title'=>$app->objdata['title'],'url'=>false);
      $rss = $app->main_object->get_rss($app->action);
    }

    $result->set('items',$menuitems);
    $result->set('rss',$rss);

    return $result;
  }

}